Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [sdl] Collisioni laterali
Forum - C/C++ - [sdl] Collisioni laterali

Avatar
bios1993 (Normal User)
Pro


Messaggi: 64
Iscritto: 18/01/2009

Segnala al moderatore
Postato alle 15:55
Giovedì, 26/05/2011
Salve ragazzi volevo chiedere a chi ha più dimestichezza come posso scoprire una collisione laterale tra due rettangoli(tra due surface)

Codice sorgente - presumibilmente C/C++

  1. void PG::collide(EVENT e[],int n)
  2. {
  3.         terra =false;
  4.         bloccolato=0;
  5.         for(int i=0;i<n;++i)
  6.         {
  7.                 if((x+xpiedi+wpiedi>e[i].x) && (y+ypiedi+hpiedi>=e[i].y) && (x+xpiedi<e[i].x+e[i].w) && (y+ypiedi<=e[i].y+e[i].h))
  8.                 {
  9.                         g = 10;
  10.                         terra = true;
  11.                 }
  12.                 if((x+xpiedi+wpiedi>e[i].x) && (ybuffer+ypiedi+hpiedi>e[i].y) && (x+xpiedi<e[i].x+e[i].w) && (ybuffer+ypiedi<e[i].y+e[i].h))
  13.                 {
  14.                         g = e[i].y-(y+ypiedi+hpiedi);
  15.                 }
  16.  
  17.         }



questa funzione gestisce bene solo la "collisione globale"

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:53
Giovedì, 26/05/2011
questi algoritmi così elementari sono stati già studiati e risolti in un miliardo e mezzo di modi diversi...


Quello che ti serve è il primo algoritmo mostrato in questa pagina: http://www.gamedev.net/page/resources/_/reference/programm ...

Se vuoi approfondire consulta gli altri tutorials di gamedev.net e di gameprog.it

Ciao ;)

PM Quote
Avatar
bios1993 (Normal User)
Pro


Messaggi: 64
Iscritto: 18/01/2009

Segnala al moderatore
Postato alle 11:49
Venerdì, 27/05/2011
scusa ma forse non hai capito la mia domanda, io avevo chiesto uno spunto su come gestire la collisione laterale.quello che mi hai dato tu l'ho fatto nel primo e nel secondo if

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 16:24
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da bios1993:

scusa ma forse non hai capito la mia domanda, io avevo chiesto uno spunto su come gestire la collisione laterale.quello che mi hai dato tu l'ho fatto nel primo e nel secondo if



a sto punto la domanda sorge spontanea: che intendi per "collisione laterale"?
Se fai un disegno con un semplice schema almeno ci capiamo tutti

PM Quote
Avatar
bios1993 (Normal User)
Pro


Messaggi: 64
Iscritto: 18/01/2009

Segnala al moderatore
Postato alle 17:45
Venerdì, 27/05/2011
intendo come faccio a riconoscere la collisione a destra o la collisione a sinistra di una Surface

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:04
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da bios1993:

intendo come faccio a riconoscere la collisione a destra o la collisione a sinistra di una Surface



con l'algoritmo che ti ho linkato

PM Quote
Avatar
bios1993 (Normal User)
Pro


Messaggi: 64
Iscritto: 18/01/2009

Segnala al moderatore
Postato alle 18:57
Venerdì, 27/05/2011
si lo so, anche quello che ho postato io lo fa, il mio unico problema è capire però da quale lato della surface capita la collisione.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 19:00
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da bios1993:

si lo so, anche quello che ho postato io lo fa, il mio unico problema è capire però da quale lato della surface capita la collisione.



traducendo, quello che ti interessa è il "vettore di penetrazione".

Se avessi sfogliato quei siti che ti ho già linkato avresti già trovato la soluzione... hai la fortuna di avere internet e non sai nemmeno come usarlo? 8-|

PM Quote
Avatar
Oligoatria (Founder Member)
Pro


Messaggi: 79
Iscritto: 20/02/2006

Segnala al moderatore
Postato alle 12:45
Lunedì, 30/05/2011
TheKaneB ha ragione. Nel link da lui segnalato c'è un'implementazione che permette in maniera piuttosto naturale di capire dove avviene la collisione. Nel blocco condizionale che hai riportato, invece, esegui tutti i controlli nello stesso if. E' chiaro che non ti basta per capire quale delle tante condizioni rende vero lo statement.

PM Quote